﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.ObjectModel;
using Chilis.Marketing.Business.Entity;
using System.Collections;
using System.Data;
using Chilis.Marketing.Common;
using Chilis.Marketing.Business.Logic;
using System.Text;

public partial class Gral_DetArte : System.Web.UI.Page
{
    #region ATRIBUTOS

    private Constantes.ACCION accion;
    private int tamanhoMaximoArchivo = 6;
    private BLCampanha campanhaBL;
    private BLArte arteBL;
    private BLTipoArchivoDisponible tipoArchivoDisponibleBL;

    #endregion

    #region PROPIEDADES
    #endregion

    #region METODOS

    private void ActivarControles(bool activo)
    {
        this.txtCreativo.Enabled = false;
        this.txtCorrelativo.Enabled = false;
        this.txtEstado.Enabled = false;
        this.txtDescripcion.Enabled = activo;
        
    }

    private void CargarDatos(int idArte)
    {
        this.campanhaBL = new BLCampanha();
        BECampanha campanhaBE = this.campanhaBL.obtenerCampanhaPorArteId(idArte);
        if (campanhaBE != null)
        {
            this.txtIdArte.Value = idArte.ToString();
            this.txtIdCampanha.Value = campanhaBE.IdCampanha.ToString();

            if (campanhaBE.Creativo != null)
            {
                this.txtIdCreativo.Value = campanhaBE.Creativo.IdTrabajador.ToString();

                string nombreCompleto = campanhaBE.Creativo.ApellidoPaterno.ToUpper();
                nombreCompleto += (campanhaBE.Creativo.ApellidoMaterno != string.Empty ? " " + campanhaBE.Creativo.ApellidoMaterno.ToUpper() : string.Empty);
                nombreCompleto += (campanhaBE.Creativo.Nombres != string.Empty ? ", " + campanhaBE.Creativo.Nombres : string.Empty);
                this.txtCreativo.Text = nombreCompleto;
            }

            if (campanhaBE.LArtes != null && campanhaBE.LArtes.Count > 0)
            {
                BEArte arteBE = campanhaBE.LArtes[0];
                this.txtCorrelativo.Text = arteBE.Correlativo.ToString().PadLeft(3, '0');
                this.txtDescripcion.Text = arteBE.Descripcion;
                this.txtEstado.Text = arteBE.DescripcionAprobado;

                int idTipoArchivo = 0;
                if (arteBE.TipoArchivo != null && arteBE.TipoArchivo.IdTipoArchivo > 0)
	            {
		            idTipoArchivo = arteBE.TipoArchivo.IdTipoArchivo;
	            }

                this.ConfigFuncDescargar(arteBE.IdArte, idTipoArchivo);
            }
        }
    }

    private BEArte ObtenerArteBE_WebForm()
    {
        BEArte arteBE = new BEArte();
        if (this.txtIdArte.Value != string.Empty)
        {
            int tempIdArte = Constantes.idValorNulo;
            int.TryParse(this.txtIdArte.Value, out tempIdArte);
            arteBE.IdArte = tempIdArte;
        }
        if (this.txtCorrelativo.Text != string.Empty)
        {
            int tempCorrelativo = Constantes.idValorNulo;
            int.TryParse(this.txtCorrelativo.Text, out tempCorrelativo);
            arteBE.Correlativo = tempCorrelativo;
        }
        arteBE.Descripcion = this.txtDescripcion.Text.Replace("'", "''");

        if (fuArchivo != null && fuArchivo.HasFile)
        {
            arteBE.TipoArchivo = new BETipoArchivoDisponible();
            arteBE.TipoArchivo.Extension = ObtenerExtensionArchivo(fuArchivo);
            arteBE.TipoArchivo.IdTipoArchivo = ObtenerTipoArchivo(arteBE.TipoArchivo.Extension);

            arteBE.TituloArchivo = ObtenerNombreArchivo(fuArchivo);
            arteBE.ContenidoArchivo = fuArchivo.FileBytes;
            //documentoBE.TipoMedio = fuArchivo.PostedFile.ContentType;           
        }

        arteBE.Order_by = (char)Constantes.ORDENAR_POR.CODIGO;
        arteBE.De_forma = (char)Constantes.DE_FORMA.ASCENDENTE;

        return arteBE;
    }

    private void CargarTitulos(string tituloTxt)
    {
        this.lblTitulo.Text = tituloTxt;
    }

    private void CargarCampanha(int idCampanha)
    {
        this.campanhaBL = new BLCampanha();
        BECampanha campanhaBE = this.campanhaBL.obtenerCampanhaPorId(idCampanha);
        if (campanhaBE != null)
        {
            this.txtIdCampanha.Value = campanhaBE.IdCampanha.ToString();

            if (campanhaBE.Creativo != null)
            {
                this.txtIdCreativo.Value = campanhaBE.Creativo.IdTrabajador.ToString();

                string nombreCompleto = campanhaBE.Creativo.ApellidoPaterno.ToUpper();
                nombreCompleto += (campanhaBE.Creativo.ApellidoMaterno != string.Empty ? " " + campanhaBE.Creativo.ApellidoMaterno.ToUpper() : string.Empty);
                nombreCompleto += (campanhaBE.Creativo.Nombres != string.Empty ? ", " + campanhaBE.Creativo.Nombres : string.Empty);
                this.txtCreativo.Text = nombreCompleto;
            }
        }
    }

    private void ConfigFuncDescargar(int idArte, int idTipoArchivo)
    {
        StringBuilder click = new StringBuilder();
        if (idTipoArchivo > 0)
        {
            click.AppendLine(String.Format("window.open('VisDocumento.ashx?id={0}','modal','scrollbars=yes,resizable=yes');", idArte));
            btnVerAdjunto.Attributes.Add("onclick", click.ToString());
        }
        else
        {
            this.btnVerAdjunto.Visible = false;
            //click.AppendLine("alert('No hay archivo adjunto. Por favor revisar.'); return false;");
            //btnVerAdjunto.Attributes.Add("onclick", click.ToString());
        }
    }

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!Page.IsPostBack)
            {
                ControlHelper.RegisterClientScriptFile(this, "jquery.js", true);
                ControlHelper.RegisterClientScriptFile(this, "json2.js", true);
                ControlHelper.RegisterClientScriptFile(this, "thickbox.js", true);

                this.accion = Constantes.ACCION.NINGUNO;
                if (Request.QueryString["acc"] != null)
                {
                    accion = Constantes.ObtenerEnumAccion(Request.QueryString["acc"]);
                }
                switch (accion)
                {
                    case Constantes.ACCION.NINGUNO:
                        break;
                    case Constantes.ACCION.VER:
                        this.CargarTitulos(Mensajes.txtTitulo_ArteVer);
                        this.btnAceptar.Visible = false;
                        this.btnVerAdjunto.Visible = false;
                        if (Request.QueryString["id"] != null)
                        {
                            int idArte = int.Parse(Request.QueryString["id"].ToString());
                            this.ConfigurarTiposArchivos();
                            this.CargarDatos(idArte);
                            this.ActivarControles(false);
                        }
                        break;
                    case Constantes.ACCION.NUEVO:
                        this.CargarTitulos(Mensajes.txtTitulo_ArteNuevo);
                        this.btnVerAdjunto.Visible = false;
                        if (Request.QueryString["idcmp"] != null)
                        {
                            int idCampanha = Constantes.idValorNulo;
                            int.TryParse(Request.QueryString["idcmp"], out idCampanha);
                            this.CargarCampanha(idCampanha);
                            this.ConfigurarTiposArchivos();
                        }
                        this.ActivarControles(true);
                        break;
                    case Constantes.ACCION.MODIFICAR:
                        this.CargarTitulos(Mensajes.txtTitulo_ArteModificar);
                        if (Request.QueryString["id"] != null)
                        {
                            int idArte = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idArte);
                            this.ConfigurarTiposArchivos();
                            this.ActivarControles(true);
                        }
                        break;
                    case Constantes.ACCION.ELIMINAR:
                        this.CargarTitulos(Mensajes.txtTitulo_ArteEliminar);
                        if (Request.QueryString["id"] != null)
                        {
                            int idArte = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idArte);
                            this.ConfigurarTiposArchivos();
                            this.ActivarControles(false);
                        }
                        break;
                    case Constantes.ACCION.ASOCIAR:
                        break;
                    case Constantes.ACCION.APROBAR:
                        break;
                    case Constantes.ACCION.GENERAR_REPORTE:
                        break;
                    default:
                        break;
                }
            }
        }
        catch (Exception ex)
        {
            Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_MostrarDetalle + "&descError=" + ex.Message, false);
        }
    }

    protected void btnAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            Constantes.ACCION accion = Constantes.ACCION.NINGUNO;
            if (Request.QueryString["acc"] != null)
            {
                accion = Constantes.ObtenerEnumAccion(Request.QueryString["acc"]);
            }

            BECampanha campanhaBE = null;
            if (this.txtIdCampanha.Value != string.Empty)
            {
                int tempIdCampanha = Constantes.idValorNulo;
                int.TryParse(this.txtIdCampanha.Value, out tempIdCampanha);
                campanhaBE = new BECampanha();
                campanhaBE.IdCampanha = tempIdCampanha;

                if (this.txtIdCreativo.Value != string.Empty)
                {
                    int tempIdCreativo = Constantes.idValorNulo;
                    int.TryParse(this.txtIdCreativo.Value, out tempIdCreativo);
                    campanhaBE.Creativo = new BETrabajador();
                    campanhaBE.Creativo.IdTrabajador = tempIdCreativo;
                }
            }

            this.arteBL = new BLArte();
            BEArte arteBE = this.ObtenerArteBE_WebForm();

            if (arteBE != null)
            {
                campanhaBE.LArtes = new List<BEArte>();
                campanhaBE.LArtes.Add(arteBE);
            }

            //if (!ValidarDatosIngreso())
            //{
            //    return;
            //}
            if (arteBE.TipoArchivo != null && arteBE.TipoArchivo.IdTipoArchivo == 0)
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script language='javascript'>");
                sb.Append(@"alert('El archivo con extensión " + arteBE.TipoArchivo.Extension.ToUpper() + " no es soportado por la aplicación');");
                sb.Append(@"</script>");

                if (!ClientScript.IsStartupScriptRegistered("JSScriptValDetArte"))
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "JSScriptValExtDetArte", sb.ToString());
                }
                return;
            }
            if (!ValidaAtributosArchivo(fuArchivo))
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script language='javascript'>");
                sb.Append(@"alert('El archivo es mayor de " + tamanhoMaximoArchivo.ToString() + " MB, por favor revisar.');");
                sb.Append(@"</script>");

                if (!ClientScript.IsStartupScriptRegistered("JSScriptValMaxDetArte"))
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "JSScriptValMaxDetArte", sb.ToString());
                }
                return;
            }

            string msjeError = "";
            string msjeExitoOperacion = "";
            string msjeErrorOperacion = "";
            bool result = false;

            switch (accion)
            {
                case Constantes.ACCION.NINGUNO:
                    break;
                case Constantes.ACCION.VER:
                    break;
                case Constantes.ACCION.NUEVO:
                    msjeErrorOperacion = Mensajes.msjeError_InsertarRegistro;
                    msjeExitoOperacion = Mensajes.msjeExito_InsertarRegistro;
                    result = true;
                    result = this.arteBL.insertarArte(campanhaBE);
                    break;
                case Constantes.ACCION.MODIFICAR:
                    msjeErrorOperacion = Mensajes.msjeError_ModificarRegistro;
                    msjeExitoOperacion = Mensajes.msjeExito_ModificarRegistro;
                    result = this.arteBL.modificarArte(campanhaBE);
                    break;
                case Constantes.ACCION.ELIMINAR:
                    msjeErrorOperacion = Mensajes.msjeError_EliminarRegistro;
                    msjeExitoOperacion = Mensajes.msjeExito_EliminarRegistro;
                    arteBE.Estado = Constantes.ESTADO.INACTIVO;
                    result = this.arteBL.eliminarArte(arteBE);
                    break;
                case Constantes.ACCION.ASOCIAR:
                    break;
                case Constantes.ACCION.APROBAR:
                    break;
                case Constantes.ACCION.GENERAR_REPORTE:
                    break;
                default:
                    break;
            }

            if (result == false)
            {
                Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_General + "&descError=" + msjeError, false);
            }
            else
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script language='javascript'>");
                sb.Append(@"parent.location.reload(1);");
                sb.Append(@"self.parent.tb_remove();");
                sb.Append(@"</script>");

                if (!ClientScript.IsStartupScriptRegistered("JSScriptDetArte"))
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "JSScriptDetArte", sb.ToString());
                }
            }

        }
        catch (Exception ex)
        {
            Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_General + "&descError=" + ex.Message, false);
        }
    }

    protected void btnAceptar_PreRender(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        ScriptManager newScriptManager = (ScriptManager)Page.FindControl("smArte");
        newScriptManager.RegisterPostBackControl(btn);
    }

    #endregion

    public static Collection<BETipoArchivoDisponible> _tiposArchivos;
    private static Hashtable _extensionesValidas;

    public string ObtenerNombreArchivo(FileUpload archivo)
    {
        if (archivo != null)
        {
            string fileName = Server.HtmlEncode(archivo.FileName);
            return System.IO.Path.GetFileNameWithoutExtension(fileName).ToLower();
        }
        return string.Empty;
    }

    public string ObtenerExtensionArchivo(FileUpload archivo)
    {
        if (archivo != null)
        {
            string fileName = Server.HtmlEncode(archivo.FileName);
            return System.IO.Path.GetExtension(fileName).ToLower();
        }
        return string.Empty;
    }

    public int ObtenerTipoArchivo(string extension)
    {
        int idTipoArchivo = 0;

        if (_extensionesValidas.Contains(extension))
        {
            int.TryParse(_extensionesValidas[extension].ToString(), out idTipoArchivo);
        }
        return idTipoArchivo;
    }


    private void ConfigurarTiposArchivos()
    {
        tipoArchivoDisponibleBL = new BLTipoArchivoDisponible();

        BETipoArchivoDisponible tipoArchivoDisponibleBE = new BETipoArchivoDisponible();
        tipoArchivoDisponibleBE.Estado = Constantes.ESTADO.ACTIVO;
        DataTable dtTiposArchivos = tipoArchivoDisponibleBL.buscarTiposArchivosDisponibles(tipoArchivoDisponibleBE);

        _tiposArchivos = ObtenerExtensionesValidas(dtTiposArchivos);
        SplitExtensionesTiposArchivos(_tiposArchivos);
    }

    /// <summary>
    /// Gets the valid extentions.
    /// </summary>
    /// <param name="mediaTypes">The media types.</param>
    /// <returns></returns>
    private Collection<BETipoArchivoDisponible> ObtenerExtensionesValidas(DataTable dtTiposArchivos)
    {
        Collection<BETipoArchivoDisponible> fileTypes = new Collection<BETipoArchivoDisponible>();

        foreach (DataRow drFila in dtTiposArchivos.Rows)
        {
            int tempIdTipoMedio = 0;
            int.TryParse(drFila["id_tipo_archivo"].ToString(), out tempIdTipoMedio);
            string icono = drFila["icono"].ToString();
            string extension = drFila["extension"].ToString();
            string descripcion = drFila["descripcion"].ToString();
            fileTypes.Add(new BETipoArchivoDisponible(tempIdTipoMedio, icono, extension, descripcion, string.Empty, Constantes.ESTADO.ACTIVO, string.Empty));
        }

        return fileTypes;
    }

    private void SplitExtensionesTiposArchivos(Collection<BETipoArchivoDisponible> tipoArchivos)
    {
        string extention;
        foreach (BETipoArchivoDisponible tipArch in tipoArchivos)
        {
            if (tipArch != null)
            {
                extention = tipArch.Extension;
                string[] extentions = extention.Split(';');
                for (int x = 0; x < extentions.Length; x++)
                {
                    extentions[x] = extentions[x].Replace("*", string.Empty);
                    extentions[x] = extentions[x].Replace(" ", string.Empty);

                    if (_extensionesValidas == null)
                    {
                        _extensionesValidas = new Hashtable();
                    }
                    if (!string.IsNullOrEmpty(extentions[x]) && !_extensionesValidas.ContainsKey(extentions[x].ToLower()))
                        _extensionesValidas.Add(extentions[x].ToLower(), tipArch.IdTipoArchivo);
                }
            }

        }
    }

    /// <summary>
    /// Gets the image URL.
    /// </summary>
    /// <returns></returns>
    public string obtenerImgUrl()
    {
        BETipoArchivoDisponible tempTipoArchivo = (BETipoArchivoDisponible)this.GetDataItem();

        //string iconoTipoArchivo = String.Format(@"~\App_Themes\{0}\Images\iconos-archivos\{1}", "Default", tempTipoArchivo.Icono);
        string iconoTipoArchivo = String.Format(@"~\Img\iconos-archivos\{0}",tempTipoArchivo.Icono);
        return iconoTipoArchivo;
    }

    /// <summary>
    /// Gets the image description.
    /// </summary>
    /// <returns></returns>
    public string obtenerImgDescripcion()
    {
        string descTipoArchivo = string.Empty;
        BETipoArchivoDisponible tempTipoArchivo = (BETipoArchivoDisponible)this.GetDataItem();
        if (tempTipoArchivo != null)
        {
            descTipoArchivo = tempTipoArchivo.Extension;
            if (!string.IsNullOrEmpty(descTipoArchivo))
            {
                descTipoArchivo = descTipoArchivo.Replace("*", string.Empty);
                descTipoArchivo = descTipoArchivo.Replace(" ", string.Empty);
                if (descTipoArchivo.Substring(descTipoArchivo.Length - 1, 1) == ";")
                    descTipoArchivo = descTipoArchivo.Substring(0, descTipoArchivo.Length - 1);

                descTipoArchivo = descTipoArchivo.Replace(";", ", ");
                descTipoArchivo = tempTipoArchivo.Descripcion + " (" + descTipoArchivo + ")";
            }
        }
        return descTipoArchivo;
    }

    public Collection<BETipoArchivoDisponible> TiposArchivos()
    {
        return _tiposArchivos;
    }

    protected void RepeaterTipoArchivosDisponiblesPreRender(object sender, EventArgs e)
    {
        TipoArchivosDisponibles.DataSource = this.TiposArchivos();
        TipoArchivosDisponibles.DataBind();
    }

    private bool ValidaAtributosArchivo(FileUpload fuTempArchivo)
    {
        bool respuesta = true;
        // check size
        //if (FileUpload.PostedFile.ContentLength > this.MaxSize * 1000000)
        if (fuTempArchivo.PostedFile.ContentLength > tamanhoMaximoArchivo * 1000000)
        {
            respuesta = false;
        }
        return respuesta;
    }
    
}